package com.sp.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDpReceiverA {
    public static void main(String[] args) throws IOException {
        //1. 创建一个DatagramSocket对象, 准备再9999接收数据
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //2. 构建一个DatagramPacket对象, 准备接收数据
        // UDP协议中, 一个数据包最大64k
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3. 调用接收方法, 将通过网络传输的DatagramPacket对象 填充到packet对象
        //当有数据包发送到本机的9999端口时, 就会接受到数据; 如果没有, 就会阻塞等待
        System.out.println("接收端A 等待接收数据");
        datagramSocket.receive(packet);

        //4. 把packet进行拆包, 取出数据, 并显示
        int length = packet.getLength();
        byte[] data = packet.getData();
        String s = new String(data, 0, length);
        System.out.println(s);

        //回复消息给B端
        //将需要发送的数据, 封装到DatagramPacket对象
        data = "好的, 明天见".getBytes();
        //说明: 封装的DatagramPacket对象 data 内容字节数组, data.length, 主机(IP), 端口
        packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.0.101"), 9998);
        datagramSocket.send(packet);

        //5. 关闭资源
        datagramSocket.close();
        System.out.println("A端退出");
    }
}
